今天一開始先來介紹,怎麼把字串分開列出來!Ruby為字串提供了一個方法: .each_char ,我們來看看例子:
a = "我想要被拆開而且串起來!"
a.each_char {|c| print "-#{c}-"}
執行結果=> "-我--想--要--被--拆--開--而--且--串--起--來--!-"
在 .each_char 的方法後面可以看到一個大括號,這在Ruby裡我們將大括號稱之為Block,裡面可以放我們希望迭代的內容,未來會提到陣列跟雜湊的迭代,這邊只是先簡略說明。
大概可將 a.each_char {|c| puts "-#{c}-"} 拆成兩部分來看:
(第2點就是看有幾個字元,就要做幾遍!到了陣列Array與雜湊Hash時會常常使用Block喔!)
接下來我們可以來算算字串的長度、所占的位元組數目...等。
a = "我愛Ruby"
a.length => 6 # 可以知道字串長度是6
a.bytesize => 10 # 可以知道字串所佔位元組的數目是10
a.bytesize.times {|i| print a.getbyte(i), " "}
# 上面這可以列出個別的位元組(雖然不知道這可以幹嘛XD?)
a.setbyte(6, a.getbyte(6)+1)
# 上面這串執行後,a現在已經變成"我愛Suby"
# 因為這串語法把第六個位元組的儲存內容+1,所以字也改變了!
一開始對上面例子的length和bytesize的差異感到很疑惑,後來查了資料才知道,在UTF-8的編碼中,會使用1到4個位元組的浮動長度來編碼,不像Big-5的編碼都是固定中文字占2個位元組。以這個例子來說,"我" 和 "愛" 都占了3個位元組!大家也可以到這個網站輸入文字測測它的長度跟位元組。
接下去書中就要提陣列Array了,但陣列是個大主題,我打算明天再說XD看了三天的字串下來,我們稍稍用下面這個例子來整理概念!
b = "123456789" #在字串裡放數字
#想想看下面這行code會印出什麼呢?
b.each_char {|x| print x + "1"}
想到了上面的答案了嗎?放三隻熊來防雷(XD?)
答案是:
=> "112131415161718191"
#用each_char把字串拆開後,每個字串後面再接上一個"1"的字串。
答對了嗎XD?
可是,那如果真的想要讓每個數字+1該怎麼做呢?先偷渡一個目前書上還沒看到,但也是字串提供的一個方法: .to_i
.to_i :可以讓字串轉成數字,例如:
"5566".to_i
=> 5566 #字串"5566"經過to_i之後就變成數字5566了
"Ruby".to_i
=> 0 #Ruby不是數字,所以轉成數字自動改成0
其實數字也可以轉成字串,用的方法是 .to_s
2266.to_s
=> "2266"
#方法也可以串接起來:
2266.to_s.to_i
=> 2266 #先變成字串再變成數字!
那這個方法跟剛剛的小例題有什麼關係呢?我們剛剛提到,希望b="123456789",可以變成"2345678910",我們可以這麼做:
b="123456789"
b.each_char {|x| print x.to_i + 1} #先把每個字元變成數字,就可以+1了!
執行結果=> "2345678910"
=================================================
第八天了!
Keep moving forward. One step at a time.
繼續前進!GOGO!